package com.CRApp.mapper;

import com.CRApp.pojo.Cart;
import com.CRApp.pojo.CartItemDTO;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;

/**
 * 购物车数据访问层接口
 * 提供购物车相关的数据库操作方法
 */
@Mapper
public interface CartMapper {
    /**
     * 添加商品到购物车
     * @param cart 购物车项信息
     * @return 影响的行数
     */
    int insert(Cart cart);
    
    /**
     * 根据ID查询购物车项
     * @param cartId 购物车项ID
     * @return 购物车项信息
     */
    Cart selectById(@Param("cartId") Integer cartId);
    
    /**
     * 查询用户的购物车列表
     * @param userId 用户ID
     * @return 购物车项列表
     */
    List<Cart> selectByUserId(@Param("userId") Integer userId);
    
    /**
     * 查询用户的购物车列表（带商品详情）
     * @param userId 用户ID
     * @return 购物车项列表（带商品详情）
     */
    List<CartItemDTO> selectCartItemDTOsByUserId(@Param("userId") Integer userId);
    
    /**
     * 查询购物车项详情（带商品详情）
     * @param cartId 购物车项ID
     * @return 购物车项（带商品详情）
     */
    CartItemDTO selectCartItemDTOById(@Param("cartId") Integer cartId);
    
    /**
     * 更新购物车商品数量
     * @param cartId 购物车项ID
     * @param quantity 新的商品数量
     * @return 影响的行数
     */
    int updateQuantity(@Param("cartId") Integer cartId, @Param("quantity") Integer quantity);
    
    /**
     * 删除购物车项
     * @param cartId 购物车项ID
     * @return 影响的行数
     */
    int deleteById(@Param("cartId") Integer cartId);
    
    /**
     * 删除购物车中的特定商品
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 影响的行数
     */
    int deleteByUserIdAndProductId(@Param("userId") Integer userId, @Param("productId") Integer productId);
    
    /**
     * 清空用户购物车
     * @param userId 用户ID
     * @return 影响的行数
     */
    int deleteByUserId(@Param("userId") Integer userId);
    
    /**
     * 查询用户购物车中的特定商品
     * @param userId 用户ID
     * @param productId 商品ID
     * @return 购物车项信息
     */
    Cart selectByUserIdAndProductId(@Param("userId") Integer userId, @Param("productId") Integer productId);
} 